<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!-- 作用域： -->
    <!-- 全局作用域：变量或函数定义在script标签里、函数外那么就是一个全局变量或者全局函数，对应的是全局作用域
    -->
    <!-- 局部作用域:
        在js中只有函数才有，只有函数中能调用
    -->
    <!-- 块级作用域
        可以用let来定义块级作用域，外面不能访问，ES5语法
        http://es6.runanyifeng.com
        能用var的地方，都能用let
    -->
    <script>
        {
            let num = 19;
            // 只有花括号内可以可以用这个num变量
        }
        // console.log(num) // ===> num is not defined
        // 作用域链：
        // 变量的使用，从里到外，层层搜索，搜索到了就可以直接使用了
        // 层层搜索，搜索到0级作用域的时候， 如果还没有找到这个变量就报错 num is not defined
        // var num = 10;
        function fn() {
            // var num = 20;
            function fn2() {
                // var num = 30;
                console.log(num);
            }
            fn2();
        }
        // fn();
        // let会阻止变量声明提升，先调用后声明则会报错提醒
        // console.log(i); // ==> i is not defined
        // let i = 20;
        // 变量和函数先声明后使用 业内规则
        var name = "张三";
        function fn() {
            var num = 10;
        }
        fn();
        console.log(num);
        for (var i = 0; i < 5; i++) {
            console.log(0);
        }
        // 最终值是i
        console.log(i);
    </script>
</body>
</html>